<?php

namespace app\common\controller;

use think\Controller;
use think\Db;
use think\response\Json;
use think\Session;
class Base extends Controller {

    /**
     * 析构函数
     */
    function __construct()
    {
        Session::start();
        parent::__construct();
    }

    /*
     * 初始化操作
     */
    public function _initialize()
    {
        $this->request->isAjax() ? define('IS_AJAX',true) : define('IS_AJAX',false);  //
        ($this->request->method() == 'GET') ? define('IS_GET',true) : define('IS_GET',false);  //
        ($this->request->method() == 'POST') ? define('IS_POST',true) : define('IS_POST',false);  //
        define('MODULE_NAME',$this->request->module());  // 当前模块名称是
        define('CONTROLLER_NAME',$this->request->controller()); // 当前控制器名称
        define('ACTION_NAME',$this->request->action()); // 当前操作名称是
        define('DB_PREFIX',config('database.prefix')); // 数据库表前缀
        $this->assign('action',ACTION_NAME);
        //过滤不需要登陆的行为
        if(in_array(ACTION_NAME,array('login','logout','captcha')) || in_array(CONTROLLER_NAME,array('Ueditor','Uploadify'))){
            //return;
        }else{

            if(session('admin_auth')["admin_id"] == 1){
            }elseif(session('admin_auth')["admin_id"]>1){
                $this->check_priv(session('admin_auth')["admin_id"]);//检查管理员菜单操作权限
            }else{
                //$this->error('请先登陆',U('htsoft/Admin/login'),1);
                $this->redirect(url('htsoft/admin/login'));
            }

        }

    }
    //管理员级别信息获取
    public function admin_info(){
        $admin_id=session('admin_id') ;
        $join3 = "  d.id = u.city";
        $msg1 = Db::name("admin_users")->alias("u")->join(DB_PREFIX . "district d", $join3, "left")
            ->where(["u.id"=>$admin_id])->value("d.name");
        return $msg1;
    }
    public function check_priv($uid)
    {
        $ctl = CONTROLLER_NAME;
        $act = ACTION_NAME;
        $act_list = session('act_list');
        //无需验证的操作
        $uneed_check = array('login','logout','vertifyHandle','vertify','imageUp','upload','login_task');
        if($ctl == 'Index' || $act_list == 'all'){
            //后台首页控制器无需验证,超级管理员无需验证
            return true;
        }elseif(strpos($act,'ajax') || in_array($act,$uneed_check)){
            //所有ajax请求不需要验证权限
            return true;
        }else{
            $type = 'admin_url';
            $is_has_priv=sp_auth_check($uid,$type);
            if(!$is_has_priv){
                if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"])=="xmlhttprequest"){
                    // ajax 请求的处理方式
                    $this -> error('您没有操作权限，请联系超级管理员分配权限！');
                }else{
                    // 正常请求的处理方式
                    $this -> error('您没有操作权限，请联系超级管理员分配权限！');
//	            		echo "<script>alert('您没有操作权限，请联系超级管理员分配权限！');history.go(-1);</script>";
                    die();
                };
            }
        }
    }


    /**
     * 初始化后台菜单
     */
    public function initMenu() {
//        $Menu = F("Menu");
//        if (!$Menu) {
        $Menu=model("Menu")->menu_cache();
//        }
        return $Menu;
    }
    /**
     * Ajax方式返回数据到客户端
     * @access protected
     * @param mixed $data 要返回的数据
     * @param String $type AJAX返回数据格式
     * @param int $json_option 传递给json_encode的option参数
     * @return void
     */
    protected function ajaxReturn($data, $type = 'JSON', $json_option = 0)
    {
        if (empty($type)) $type = C('DEFAULT_AJAX_RETURN');
        switch (strtoupper($type)) {
            case 'JSON' :
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                exit(json_encode($data, $json_option));
            case 'XML'  :
                // 返回xml格式数据
                header('Content-Type:text/xml; charset=utf-8');
                exit(xml_encode($data));
            case 'JSONP':
                // 返回JSON数据格式到客户端 包含状态信息
                header('Content-Type:application/json; charset=utf-8');
                $handler = isset($_GET[C('VAR_JSONP_HANDLER')]) ? $_GET[C('VAR_JSONP_HANDLER')] : C('DEFAULT_JSONP_HANDLER');
                exit($handler . '(' . json_encode($data, $json_option) . ');');
            case 'EVAL' :
                // 返回可执行的js脚本
                header('Content-Type:text/html; charset=utf-8');
                exit($data);
            default     :
                // 用于扩展其他返回格式数据
                Hook::listen('ajax_return', $data);
        }
    }

}
